package com.cskaoyan.javase.string.notvar2;

/**
 * @description: 字符串不可变性
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import java.util.Scanner;

/**
 * 引例
 * 键盘输入接收一个字符串s，并用一个temp字符串引用指向它
 * 现在修改原先字符串s（拼接一个字符串），比较s和temp
 *
 *  字符串不可变性:
 *  String对象的底层是final的字符数组，不可变
 *  于是对任何String字符串进行操作，都是从新创建一个String对象
 *
 *  后面学习的所有对字符串的操作，都不是直接操作原先对象，而是创建新对象
 *
 */
public class Demo {
    public static void main(String[] args) {
        //键盘接收字符串
        System.out.println("请输入一串字符串：");
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String temp = s;
        System.out.println(s == temp); //比的是地址 这里一定是true

        s = s + "是狗"; //按照常理修改字符串内容 相当于改变字符串对象的状态 不会对地址造成影响
        //所以地址值不会变化
        System.out.println(s == temp); // 按常理这里应该返回true，但实际上返回了一个false
    }
}
